import axios from "axios";
import router from "@/router";

const request = axios.create({
    timeout: 5000
   // ,baseURL:"/boot"//表示所有的请求，都以这个地址开头，这个地址会被路由进行处理
})


// request拦截器
//可以自请求发送前对请求做一些处理//比如统一加token，对请求参数统一加密
//Token储存在客户端的方式：
// 1 、localStroage、和sessionStroage
//      他们的区别是关闭浏览器时sessionStroage，会被清除，localStroage不会被清除
//      webStroage的缺点是容易受到XSS攻击，但是这个我们是可以防范的
//      XSS攻击：通过利用程序漏洞，注入代码，获取系统权限
// 2 、Cookie
//      存放在Cookie中，可以通过设置http-only，来进行防止XSS攻击，
//      也可以通过设置secure来保证，保证cookie只在https协议下传输，
//      缺点是容易受到CSRF攻击，可能会被其他网站获取到cookie，然后，
//      通过身份信息，伪造用户操作
//
// 3、 无论是cookie-session还是JWT，都存在被XSS攻击盗取的风险
//     详细解决方案：https://blog.csdn.net/u012888704/article/details/107408427
request.interceptors.request.use(config => {
        config.headers['Content-Type'] = 'application/json;charset=ut-8';

        // config.headers[ 'token ' ] = user.token;//设置请求头
    let item = sessionStorage.getItem("user");
    if (!item){
        router.push("/login")
    }

    return config
    }, error => {
        return Promise.reject(error)
    }
);


//response 拦截器
//可以在接口响应后统一处理结果
request.interceptors.response.use(
    response => {
        let res = response.data;
        //如果是返回的文件
        if (response.config.responseType === 'blob') {
            return res
        }
        //兼容服务端返回的字符串数据
        if (typeof res === 'string') {
            res = res ? JSON.parse(res) : res
        }
        return res;

    }, error => {
        console.log("error" + error)
        return Promise.reject(error)
    }
);
export default request